const colorList = ['red', 'green', 'blue'];

type NumWord = [string, number];

export const arrayCount: (array: string[]) => NumWord[] = (array) => {
  const dict = new Map<string, number>();

  for (const item of array) {
    if (dict.has(item)) {
      const num = dict.get(item);
      if (!num) {
        continue;
      }
      dict.set(item, num + 1);
    } else {
      dict.set(item, 1);
    }
  }

  const result = Array.from(dict).sort((a, b) => b[1] - a[1]);

  return result;
};

/**
 * 文本行分割为云词数据
 * @param text 文本行 size word
 * @returns
 */
export const getWordsSplit = (text: string) => {
  // 将文本按换行符分割成行
  const lines = text.split('\n');
  // 初始化结果数组
  const result = [];
  // 遍历每一行
  for (let line of lines) {
    // 查找第一个空格的位置
    const firstSpace = line.indexOf(' ');
    // 截取第一个空格之前的部分作为数字，如果找不到则默认为0
    const num = line.slice(0, firstSpace) || 0;
    // 截取第一个空格之后的部分作为单词，如果找不到则默认为空字符串
    const word = line.slice(firstSpace) || '';
    // 如果找到了空格，并且数字不为空，单词也不为空
    if (firstSpace > -1 && num && word) {
      // 将单词和数字作为数组元素添加到结果数组中
      result.push([word, num]);
    }
  }
  // 返回结果数组
  return result;
};

/**
 * 获取随机颜色
 * @returns color string
 */
export const getRandomColor: () => string = () => {
  const i = Math.round(Math.random() * colorList.length);
  return colorList[i];
};
